package co.com.coomeva.adminEvaluacion.logica;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import co.com.coomeva.adminEvaluacion.modelo.entidades.Division;
import co.com.coomeva.adminEvaluacion.modelo.entidades.DivisionId;
import co.com.coomeva.adminEvaluacion.modelo.persistencia.DivisionDAO;
import co.com.coomeva.adminEvaluacion.modelo.util.DatabaseUtil;

public class DivisionLogica {
private static DivisionLogica divisionLogica = null;
	
	//Objeto con el que se accede a la BD
	private DivisionDAO divisionDAO = null;
	
	/**
	 * Constructor de la clase
	 */
	public DivisionLogica() {
		divisionDAO = new DivisionDAO();
	}
	
	/**
	 * Metodo que permite obtener una instancia de la clase
	 * @return Instancia de la clase
	 */
	public static DivisionLogica getInstance()	{
		if(divisionLogica == null) {
			divisionLogica = new DivisionLogica();
		}
		return divisionLogica;
	}	
		
	/**
	 * Metodo que permite consultar las ciudades
	 * @param divisionEmpresaCodigo Codigo de la empresa
	 * @param divisionGerenCodigo Codigo del gerente
	 * @param gerenciaCodigo Codigo de la gerencia
	 * @param divisionCodigo Codigo de la division
	 * @param divisionNombre Nombre de la division
	 * @param divisionEstado Estado de la division
	 * @return Lista del tipo Division con las ciudades consultadas
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public List<Division> consultarCiudades(Long divisionEmpresaCodigo, Long divisionGerenCodigo,
			Long gerenciaCodigo, Long divisionCodigo, String divisionNombre,
			String divisionEstado) throws Exception {

		Session session = divisionDAO.getSession();
		List<Division> valorList = new ArrayList<Division>();
		
		try {
			Query qSelect = session.getNamedQuery("consulta_divisiones_distintas");
			qSelect.setLong("divisionGerenCodigo", divisionGerenCodigo);
			
			List list = qSelect.list();
				
			Division objTemp;
			DivisionId objDivisionId;
			for (Iterator iter = list.iterator(); iter.hasNext();) {
				Object[] obj = (Object[]) iter.next();
		
				objTemp = new Division();
				objDivisionId = new DivisionId();
				objDivisionId.setDivisionCodigo(new Long(obj[0].toString()));
				objDivisionId.setDivisionNombre(obj[1].toString());
				objTemp.setId(objDivisionId);
				valorList.add(objTemp);
			}
		} catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error consultando los registros");
		} finally {
			divisionDAO.getSession().clear();
			divisionDAO.getSession().close();
		}
		return valorList;
	}
}
